package cube.utils.db.query;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * 搜索条件列表
 * 
 * @author abiao
 */
public class Conditions {

    /**
     * 空条件
     */
    public static final Conditions NONE = null;

    /**
     * conditionList
     */
    private List<Condition> conditionList = new ArrayList<Condition>();

    /**
     * hide me
     */
    private Conditions() {
    }

    /**
     * 获取一个空的条件列表
     * 
     * @return
     */
    public static Conditions init() {
        return new Conditions();
    }

    /**
     * 添加条件
     */
    public void add(Condition condition) {
        conditionList.add(condition);
    }

    /**
     * 添加条件
     * 
     * @param propName 属性名
     * @param propValue 属性值
     * @param relation 关系
     */
    public void add(String propName, Object propValue, Relation relation) {
        add(new Condition(propName, propValue, relation));
    }

    /**
     * 添加时间条件
     * 
     * @param propName 属性名
     * @param date 时间值
     * @param relation 关系
     */
    public void addDate(String propName, Date date, Relation relation) {
        add(propName, ConditionUtil.convert(date), relation);
    }

    /**
     * 添加集合in条件
     * 
     * @param propName 属性名
     * @param set 集合条件
     */
    public void addInSet(String propName, Object... set) {
        add(propName, ConditionUtil.convert(set), Relation.IN);
    }

    /**
     * 添加集合not in条件
     * 
     * @param propName 属性名
     * @param set 集合条件
     */
    public void addNotInSet(String propName, Object... set) {
        add(propName, ConditionUtil.convert(set), Relation.NI);
    }

    /**
     * 获取条件列表
     */
    public List<Condition> getConditionList() {
        return Collections.unmodifiableList(conditionList);
    }
}
